/*
** Copyright (C) 2011 Viens Yann
**
** This program is free software; you can redistribute it and/or
** modify it under the terms of the GNU Lesser General Public
** License as published by the Free Software Foundation; either
** version 2.1 of the License, or (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
** Lesser General Public License for more details.
**
** You should have received a copy of the GNU Lesser General Public
** License along with this program; if not, write to the Free Software
** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/

#ifndef GAMECATCHER_HPP_
# define GAMECATCHER_HPP_

# include <list>
# include "AGame.hpp"
# include "Racket.hpp"
# include "ObjectDetector.hpp"
# include "Rocket.hpp"

class	GameBombCatcher: public AGame
{
public:
  GameBombCatcher();
  ~GameBombCatcher();
  void					start();
  void					stop();
  IplImage*				gameAction(IplImage* input) throw (LevelError);
  void					event(IplImage* input);
  void					move();
  void					draw(IplImage* screen);

private:
  void					initRacket(const int width = -1, const int height = -1);
  void					rocketApparitions();
  void					checkCollisions();

  Racket				_racket;
  ObjectDetector*			_detector;
  std::list<Rocket*>			_rockets;

  struct				Mover
  {
  public:
    Mover(int& life);
    bool				operator()(Rocket* item);
    int&				_life;
  };
};

#endif // !GAMECATCHER_HPP_
